package com.shujia.scala

object Demo23Implcat {

  def main(args: Array[String]): Unit = {


    /**
      * 显示转换（类型的转换）
      *
      */

    /* val s: String = "100"
     val i: Double = s.toDouble*/


    /**
      * 隐式转换
      * 1、隐式转换方法
      * 2、隐式转换变量
      * 3、隐式转换类
      *
      */


    /**
      * 1、隐式转换方法
      *
      * 隐式转换方法和方法名无关
      * 和参数类型返回值类型有关，同一个作用域中只能存在一个参数类型和返回值类型一样的隐式转换
      *
      */

    implicit def stringToInt(str: String): Int = {
      println("隐式转换方法被调用")
      Integer.parseInt(str)
    }

    def fun(i: Int) = {
      println(i + 100)
    }

    fun(1000)

    //显示类型转换
    fun(Integer.parseInt("100"))

    //自动调用隐式转换方法实现类型转换
    fun("123")

    //相当于
    fun(stringToInt("2000"))


    implicit def intToString(i: Int): String = {
      i.toString
    }


    /**
      * 隐式转换： 动态给对象增加方法
      *
      */

    val j = 1000

    val split: Array[String] = j.split(",")





  }

}
